package hbbft

// CryptoProvider 抽象出阈值加密(TPKE)与阈值签名(TBLS)能力
// 便于在 mock 与 real(真实密码库)之间切换。
type CryptoProvider interface {
    // --- TPKE ---
    TPKEPublic() interface{}
    TPKEPrivateFor(nodeIndex int) interface{}

    // --- TBLS ---
    TBLSPublic() interface{}
    TBLSPrivateFor(nodeIndex int) interface{}
}

// DKGProvider 抽象出门限公私钥生成/分发
// real 实现可使用分布式密钥生成，mock 实现回落到本地Trusted Dealer。
type DKGProvider interface {
    // Setup 返回加密与签名的共享公钥和每节点私钥份额
    // N: 节点数, T: 阈值(通常F+1)
    // 返回的 CryptoProvider 应该可被所有参与节点一致复现或正确分发
    Setup(N, T int) (CryptoProvider, error)
}

// Network 定义最小化网络发送/接收接口，便于注入真实网络或带故障/延迟模型的网络。
type Network interface {
    Send(to uint64, msg []byte) error
    Broadcast(msg []byte) error
    Start() error
    Close() error
}


